Swift - 变量与常量

变量和常量

变量

变量是编程语言中最常用的语法元素,它们用于在程序中把一个名字(例如:swiftString)和某种特定类型的值(例如:”Swift is fun.”)关联起来。

在Swift中,我们使用关键字 var 来定义各种不同的类型

1
var hello = "你好"

例如,定义一些熟悉的基本类型变量

1
2
3
4
5
6
7
8
9
10
11
12
13
//: #### Fundamental types

//: Integer
var hours = 24

//: Double
var PI = 3.14

//: Bool
var swiftIsFun = true

//: String
var hello = "你好"

除了基本类型变量之外,Swift 还有 Tuple ,多类型数据混合到一个数组

1
2
3
4
5
6
7
8
9
10
11
12
//: Tuple - Pack many types of values together
import UIKit

var me = ("name","jianxiong",["like" : ["code","code2","code3"]],18)

me.0 //"name"

me.1 //"jianxiong"

me.2 //["like" : ["code","code2","code3"]]

me.3 //18

定义好一个Tuple之后,就可以使用代码 me.0 me.1 me.2 这样的方式来访问Tuple中的变量了,同时也可以直接修改变量的值

1
2
3
4
5
// update Tuple value
me.3 = 22

var hour = 24
hour = 12

常量

如果我们定义的值不希望被修改

定义常量的方法和变量类似,我们把关键字var,变成关键字let就可以了。例如:

1
2
let minutes = 30
let fireIsHot = true

一旦我们定义常量之后,就不能再修改常量的值了,否则,编译器会告诉我们发生了错误。例如,我们修改常量fireIsHot:

1
fireIsHot = false

这时,我们就可以在Playground中直接看到一个编译错误。

1
Cannot assign to value: 'firelsHot' is a 'let' constant

只要程序中的变量值不会被修改,就总应该使用let来定义它。这不仅可以防止变量被意外修改,编译器还可以针对常量做更多优化。

Type inference / annotation

在前面的例子里,我们可以发现,无论是整数、浮点数、字符串还有Tuple,我们都没有明确的指定变量的类型, Swift编译器会根据我们为变量的赋值自动推导变量的类型,这个特性,在Swift里叫做Type Inference。

但有时,我们定义变量的时候,并不能确定变量的初始值,这个时候,我们就必须像下面这样明确告诉编译器我们需要的变量类型:var Name:Type。这种通过:Type指定变量类型的形式,在Swift中叫做Type annotation。例如:

1
2
var x: Int
var s: String